home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / disk / misc / Image2Disk.lha / Image2Disk / Image2Disk.s < prev    next >
Text File  |  1998-02-18  |  31KB  |  1,002 lines

  1. *****************************************************************************
  2. *                                        *
  3. *    PROGRAM: Image2Disk                            *
  4. *    VERSION: 1.0                                *
  5. *   SOURCE CODE: 7                                *
  6. *       DATE: 13.01. - 20.01.1998                        *
  7. *      LANGUAGE: Assembler (DevPac V3.14)                    *
  8. *     SYSTEM: A1200    KS 40.68 WB 40.42 2MB chip 8MB fast 68030/50mhz        *
  9. *                                        *
  10. *     AUTHOR: Joerg Riemer 14167 Berlin/SchottmuellerStr.107/Germany        *
  11. *      EMAIL: mission@cs.tu-berlin.de                    *
  12. *                                        *
  13. *    COMMENT: there are two assembler conditions.                *
  14. *                                        *
  15. *         1.) BSS_Section: To get a shorter File, don't assemble        *
  16. *         with BSS-section. Use StripHunk instead to generate        *
  17. *         a Code_BSS-segment. it spares some bytes! but for        *
  18. *         anybody don't know what this means: "leave it as it is"    *
  19. *                                         *
  20. *         StripHunk is available at AmiNet dev/misc/...            *
  21. *                                        *
  22. *         2.) Verify_On: image2disk has an option to verify        *
  23. *         written tracks when using [image --> disk]. if            *
  24. *         this condition is set, track-verifying will be            *
  25. *         executed by default. otherwise the flag must be        *
  26. *         set by user.                            *
  27. *                                        *
  28. *         for suggestions, hints/tips, and/or questions            *
  29. *         send an email to: mission@cs.tu-berlin.de            *
  30. *                                        *
  31. *****************************************************************************
  32.  
  33. BSS_Section        set    1
  34. Verify_On        set    0
  35.  
  36. *****************************************************************************
  37.  
  38.     output    ram:Image2Disk
  39.  
  40. ************************************************ exec definitions ***********
  41.  
  42. _LVOWaitPort        equ    -384
  43. _LVOGetMsg        equ    -372
  44. _LVOForbid        equ    -132
  45. _LVOReplyMsg        equ    -378
  46. _LVOOpenLibrary        equ    -552
  47. _LVOCloseLibrary    equ    -414
  48. _LVOOpenDevice        equ    -444
  49. _LVOCloseDevice        equ    -450
  50. _LVODoIO        equ    -456
  51. _LVOCreateIORequest    equ    -654
  52. _LVODeleteIORequest    equ    -660
  53. _LVOCreateMsgPort    equ    -666
  54. _LVODeleteMsgPort    equ    -672
  55.  
  56. pr_CLI            equ    $0AC
  57. pr_MsgPort        equ    $05C
  58.  
  59. IOSTD_SIZE        equ    $030
  60.  
  61. ************************************************ dos definitions ************
  62.  
  63. _LVOOpen        equ    -030
  64. _LVOClose        equ    -036
  65. _LVORead        equ    -042
  66. _LVOWrite        equ    -048
  67. _LVOSeek        equ    -066
  68. _LVODeleteFile        equ    -072
  69. _LVOLock        equ    -084
  70. _LVOUnLock        equ    -090
  71. _LVOCurrentDir        equ    -126
  72. _LVOLockDosList        equ    -654
  73. _LVOUnLockDosList    equ    -660
  74. _LVOFindDosEntry    equ    -684
  75. _LVOInhibit        equ    -726
  76.  
  77. OFFSET_END        equ     001
  78. OFFSET_BEGINNING    equ    -001
  79. ACCESS_READ        equ    -002
  80.  
  81. LDF_READ        equ    $001
  82. LDF_DEVICES        equ    $004
  83.  
  84. MODE_NEWFILE        equ    $3EE
  85. MODE_OLDFILE        equ    $3ED
  86.  
  87. ************************************************ reqtools definitions *******
  88.  
  89. _LVOrtAllocRequestA    equ    -030
  90. _LVOrtFreeRequest    equ    -036
  91. _LVOrtChangeReqAttrA    equ    -048
  92. _LVOrtFileRequestA    equ    -054
  93. _LVOrtEZRequestA    equ    -066
  94.  
  95.  
  96. EZREQF_NORETURNKEY    equ    $001
  97. EZREQF_CENTERTEXT    equ    $004
  98. FREQF_PATGAD        equ    $010
  99. FREQF_SAVE        equ    $002
  100.  
  101. rtfi_Dir        equ    $010
  102.  
  103. RT_TagBase        equ    $80000000
  104.  
  105. RTEZ_ReqTitle        equ    RT_TagBase+20
  106. RTEZ_Flags        equ    RT_TagBase+22
  107.  
  108. RTFI_Flags        equ    RT_TagBase+40
  109. RTFI_Dir        equ    RT_TagBase+50
  110. RTFI_MatchPat        equ    RT_TagBase+51
  111.  
  112. ************************************************ bss datas ******************
  113.  
  114. WBMsg        rs.l    1            ;workbench message
  115. DOSBase        rs.l    1            ;ptr. base of dos
  116. REQBase        rs.l    1            ;ptr. base of reqtools
  117. RCode        rs.l    1            ;buffer for returncode
  118. DLock        rs.l    1            ;buffer (returned dir.-lock)
  119. FLock        rs.l    1            ;buffer (opened file_lock)
  120. ToDo        rs.l    1            ;ptr. (subroutine to do)
  121. TList        rs.l    1            ;ptr. taglist
  122. ReqTitle    rs.l    1            ;ptr. (title for filereq.)
  123. MessagePort    rs.l    1            ;ptr. msgport for doio()
  124. IORequest    rs.l    1            ;ptr. iorequest for doio()
  125.  
  126. FReqBase    rs.l    1            ;ptr. (base of filerequester)
  127. ArgArray1    rs.l    1            ;reqtools argarray
  128. ArgArray2    rs.l    0            ;ptr. to devicename
  129. Device        rs.l    1            ;sometimes used for argarray
  130. FileName    rs.b    108            :room for filename
  131.  
  132. EFlag        rs.b    1            ;error flag
  133. DriveNum    rs.b    1            ;buffer (unit number)
  134. DriveChr    rs.b    1            ;buffer for "D","F","H","V"
  135. RWSwitch    rs.b    1            ;flag (read or write track)
  136.  
  137. VFlag        rs.b    1            ;verify-switch
  138.         rs.b    1            ;unused (for longword align)
  139.         rs.b    1            ;unused (for longword align)
  140.         rs.b    1            ;unused (for longword align)
  141.  
  142. TrackBuffer1    rs.b    512*11*2        ;for read/write tracks
  143. TrackBuffer2    rs.b    512*11*2        ;for verify written tracks
  144.  
  145. BSS_Size    rs.b    0            ;bss_size overall
  146.  
  147. OneTrack    set    BSS_Size-TrackBuffer2    ;standard track_size
  148.  
  149. ************************************************ workbench startup **********
  150.  
  151. Start        movem.l    D1-D7/A0-A6,-(SP)    ;save registers
  152.  
  153.         if    BSS_Section        ;check assembler condition
  154.  
  155.         movea.l    Start-4(pc),A5        ;get bss_section
  156.         addq.l    #1,A5            ;skip pointer (next segment)
  157.         adda.l    A5,A5            ;convert bpcl_pointer
  158.         adda.l    A5,A5            ;to real_address
  159.  
  160.         elseif                ;otherwise
  161.  
  162.         lea    DataBase(pc),A5        ;set working area
  163.  
  164.         endc                ;end condition
  165.  
  166. *****************************************************************************
  167.  
  168.         movea.l    4.w,A6            ;set execbase
  169.         movea.l    $114(A6),A2        ;find own task
  170.         tst.l    pr_CLI(A2)        ;we are from cli?
  171.         bne.b    FromCLI            ;branch if so
  172.  
  173.         lea    pr_MsgPort(A2),A0    ;set message port
  174.         jsr    _LVOWaitPort(A6)    ;wait for
  175.         lea    pr_MsgPort(A2),A0    ;set message port
  176.         jsr    _LVOGetMsg(A6)        ;get wb_message
  177.         move.l    D0,(A5)            ;and save for later return
  178.  
  179. *****************************************************************************
  180.  
  181. FromCLI        bsr.b    OpenLibs
  182.  
  183. *****************************************************************************
  184.  
  185.         tst.l    (A5)            ;launched from wb?
  186.         beq.b    ExitDOS            ;branch if not
  187.  
  188.         movea.l    4.w,A6            ;set execbase
  189.         jsr    _LVOForbid(A6)        ;use exec to (forbid) tasks
  190.         movea.l    (A5),A1            ;set wb_message
  191.         jsr    _LVOReplyMsg(A6)    ;use EXEC to (replymsg)
  192.  
  193. ExitDOS        move.l    RCode(A5),D0        ;set returncode
  194.         movem.l    (SP)+,D1-D7/A0-A6    ;restore registers
  195.         rts                ;go back (shell/wb)
  196.  
  197. *****************************************************************************
  198.  
  199. version    dc.b "$VER: image2disk 1.0 (20.1.98) by joerg riemer jan'98",0
  200.  
  201. ************************************************ open libraries *************
  202.  
  203. OpenLibs    moveq    #20,D0            ;preset returncode
  204.         move.l    D0,RCode(A5)        ;20 - library not found!
  205.  
  206.         moveq    #37,D0            ;required library version
  207.         lea    DOSName(pc),A1        ;set library name
  208.         jsr    _LVOOpenLibrary(A6)    ;use EXEC to (openlibrary)
  209.         move.l    D0,DOSBase(A5)        ;save base
  210.  
  211.         beq.b    CloseLibs        ;branch if not open
  212.  
  213.         moveq    #38,D0            ;required library version
  214.         lea    REQName(pc),A1        ;set library name
  215.         jsr    _LVOOpenLibrary(A6)    ;use EXEC to (openlibrary)
  216.         move.l    D0,REQBase(A5)        ;save base
  217.  
  218.         beq.b    CloseLibs        ;branch if not open
  219.  
  220. *****************************************************************************
  221.  
  222.         bsr.b    Main
  223.  
  224. ************************************************ close libraries ************
  225.  
  226. CloseLibs    movea.l    4.w,A6            ;set EXEC to call a function
  227.  
  228.         move.l    REQBase(A5),D1        ;get base_ptr
  229.         beq.b    CloseDOS        ;branch when not open
  230.         movea.l    D1,A1            ;set base_ptr
  231.         jsr    _LVOCloseLibrary(A6)    ;use EXEC to (closelibrary)
  232.  
  233. CloseDOS    move.l    DOSBase(A5),D1        ;get base_ptr
  234.         beq.b    QuitClose        ;branch when not open
  235.         movea.l    D1,A1            ;set base_ptr
  236.         jsr    _LVOCloseLibrary(A6)    ;use EXEC to (closelibrary)
  237.  
  238. QuitClose    rts                ;back to DOS
  239.  
  240. *****************************************************************************
  241.  
  242. DOSName        dc.b    "dos.library",0
  243. REQName        dc.b    "reqtools.library",0,0
  244.  
  245. *****************************************************************************
  246.  
  247. Main        moveq    #0,D0            ;preset returncode
  248.         move.l    D0,RCode(A5)        ;00 - everything ok!
  249.  
  250.         bsr    AllocReq        ;allocate file_requester
  251.         bsr    InitReq            ;change some attributes
  252.         bsr.b    SetDevChr        ;set device_characters
  253.  
  254. ************************************************
  255.  
  256.         if    Verify_On        ;check assembler condition
  257.         bsr.b    Verify            ;verify -> default = vflag on
  258.         elseif                ;otherwise
  259.         bsr.b    Loop            ;loop -> default = vflag off
  260.         endc                ;end condition
  261.  
  262. ************************************************
  263.  
  264.         bsr    FreeReq            ;free file_requester
  265.         rts                ;go back
  266.  
  267. ************************************************ edit main requester text ***
  268.  
  269. SetDevChr    moveq    #3,D0            ;set loop_counter
  270.         lea    ChrTable(pc),A0        ;set character table
  271.         lea    Text22(pc),A1        ;set text to edit
  272. SetChr        move.l    D0,D1            ;prepare text_offset
  273.         lsl    #3,D1            ;prepare text_offset
  274.         add    D0,D1            ;prepare text_offset
  275.         move.b    1(A0,D0.w),(A1,D1.w)    ;edit requester text
  276.         dbra    D